From: Jasper St. Pierre Date: Mon, 26 Nov 2012 19:47:30 +0000 (-0500) Subject: grabHelper: Use captured-event for escape ungrabs X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5282 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=41db363b06c0c8c1da685ea54ef251bad07c6056;p=gnome-shell.git grabHelper: Use captured-event for escape ungrabs I have no idea why we used 'event' rather than 'captured-event' before. 'event' has some really strange quirks that came up when porting PopupMenu to the GrabHelper https://bugzilla.gnome.org/show_bug.cgi?id=689109 --- diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js index f6b11ccdd..4104c8d56 100644 --- a/js/ui/grabHelper.js +++ b/js/ui/grabHelper.js @@ -43,7 +43,6 @@ const GrabHelper = new Lang.Class({ this._actors = []; this._capturedEventId = 0; - this._eventId = 0; this._keyFocusNotifyId = 0; this._focusWindowChangedId = 0; this._ignoreRelease = false; @@ -171,7 +170,6 @@ const GrabHelper = new Lang.Class({ return false; this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent)); - this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent)); } this._modalCount++; @@ -188,11 +186,6 @@ const GrabHelper = new Lang.Class({ this._capturedEventId = 0; } - if (this._eventId > 0) { - global.stage.disconnect(this._eventId); - this._eventId = 0; - } - Main.popModal(this._owner); global.sync_pointer(); }, @@ -310,6 +303,12 @@ const GrabHelper = new Lang.Class({ if (!button && this._modalCount == 0) return false; + if (type == Clutter.EventType.KEY_PRESS && + event.get_key_symbol() == Clutter.KEY_Escape) { + this.ungrab(); + return true; + } + if (this._isWithinGrabbedActor(event.get_source())) return false; @@ -327,18 +326,6 @@ const GrabHelper = new Lang.Class({ return this._modalCount > 0; }, - // We catch 'event' rather than 'key-press-event' so that we get - // a chance to run before the overview's own Escape check - _onEvent: function(actor, event) { - if (event.type() == Clutter.EventType.KEY_PRESS && - event.get_key_symbol() == Clutter.KEY_Escape) { - this.ungrab(); - return true; - } - - return false; - }, - _onKeyFocusChanged: function() { let focus = global.stage.key_focus; if (!focus || !this._isWithinGrabbedActor(focus))